﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--Include:Include\LoadHeader[,TCP 接口服务框架]-->
<body>
    <p>
        高性能的 TCP 服务框架是 AutoCSer 的核心组件，支持若干<a href="/Config/Index.html">全局默认配置</a>，需要引用 <a href="/Index.html" title="Go to the home page to download">AutoCSer</a>\Packet\*\AutoCSer.dll。
        <br />TCP 接口服务基于 Emit 动态生成代理类型，相对于使用<a href="/CodeGenerator.html">静态代码生成</a>的 <a href="/TcpServer/MethodServer.html">TCP 函数服务框架</a>上手简单，但功能支持相对简单，如果客户端与服务端共用同一个接口定义那么<b>同异步模式只能保持一致</b>。
        <!--Include:Include\InterfaceInternalOpenDifference-->
    </p>
    <div><h1>内部服务</h1></div>
    <div>
        <p>
            . 同步函数支持 ref / out 参数。
            <!--Include:Include\GetCode[Example,0,,TcpInterfaceServer\RefOut.cs]-->
        </p>
        <p>
            . 对于没有返回值且可靠性要求不高的需求，同步函数支持仅发送请求模式（无需服务端响应），返回值类型必须为 void，不支持 ref / out 参数。
            <!--Include:Include\GetCode[Example,1,,TcpInterfaceServer\SendOnly.cs]-->
        </p>
        <p>
            . 支持异步回调，返回值类型必须为 void，不支持 ref / out 参数，最后一个参数类型必须是委托 <b>Func&lt;AutoCSer.Net.TcpServer.ReturnValue, bool&gt;</b> 或者 <b>Func&lt;AutoCSer.Net.TcpServer.ReturnValue&lt;returnType&gt;, bool&gt;</b>
            <br />服务端必须保证该回调委托被执行，该委托的返回值表示回调数据是否成功添加到发送队列中，失败可能意味着该连接已经关闭；对于客户端而言该返回值没有意义。
            <!--Include:Include\GetCode[Example,2,,TcpInterfaceServer\Asynchronous.cs]-->
            <br />客户端与服务端采用不同的同异步模式需要<b>分别定义接口</b>，并通过配置 <b>CommandIdentityEnmuType</b> 建立映射关系，要求接口名称与枚举<b>名称一一对应</b>。
            <br /><b>注意</b>：服务端异步回调最后一个参数可以是抽象类型 <b>AutoCSer.Net.TcpServer.ServerCallbak</b> 或者 <b>AutoCSer.Net.TcpServer.ServerCallbak&lt;returnType&gt;</b>，该抽象类型<b>不能用于客户端</b>。
            <!--Include:Include\GetCode[Example,b,,TcpInterfaceServer\ServerAsynchronous.cs]-->
            <!--Include:Include\GetCode[Example,c,,TcpInterfaceServer\ClientAsynchronous.cs]-->
        </p>
        <p>
            . 客户端（<b>不支持服务端</b>）支持 await 异步模型，返回值参数类型必须为 <b>AutoCSer.Net.TcpServer.Awaiter</b> 或者 <b>AutoCSer.Net.TcpServer.Emit.Awaite&lt;returnType&gt;</b>。
            <!--Include:Include\GetCode[Example,d,,TcpInterfaceServer\ClientAwaiter.cs]-->
        </p>
        <p>
            . 支持异步回调注册，也就是说客户端一个请求，服务器端可以任意多次回调回应，服务端被动推送是典型的应用场景。
            <br />返回值类型必须为 <b>AutoCSer.Net.TcpServer.KeepCallback</b>，对于服务端而言该返回值没有意义。
            <!--Include:Include\GetCode[Example,3,,TcpInterfaceServer\KeepCallback.cs]-->
        </p>
        <p>
            . 支持接口继承与显示接口实现
            <!--Include:Include\GetCode[Example,4,,TcpInterfaceServer\Inherit.cs]-->
        </p>
        <p>
            . 集成支持<a href="/TcpServer/RemoteExpression.html">远程表达式链</a>
            <!--Include:Include\GetCode[Example,9,,TcpInterfaceServer\Expression.cs]-->
        </p>
        <!--Include:Include\SimpleSerialize-->
        <p>
            性能测试项目
            <br /><a href="/Index.html" title="Go to the home page to download">AutoCSer</a>\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpInternalServerPerformance.Emit
            <br /><a href="/Index.html" title="Go to the home page to download">AutoCSer</a>\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpInternalClientPerformance.Emit
            <br /><img src="//__STATICDOMAIN__/TcpServer/InterfaceServer.png?v=2" alt="TCP 接口服务框架 内部服务 吞吐性能测试" />
            <br /><img src="//__STATICDOMAIN__/TcpServer/InterfaceServer.Core.png" alt=".NET Core TCP 接口服务框架 内部服务 吞吐性能测试" />
            <br />从测试结果看来 .NET Core 的吞吐性能有较大提升。
        </p>
    </div>
    <div><h1>开放服务</h1></div>
    <div>
        <p>
            . 同步函数支持 ref / out 参数。
            <!--Include:Include\GetCode[Example,5,,TcpInterfaceOpenServer\RefOut.cs]-->
        </p>
        <p>
            . 对于没有返回值且可靠性要求不高的需求，同步函数支持仅发送请求模式（无需服务端响应），返回值类型必须为 void，不支持 ref / out 参数。
            <!--Include:Include\GetCode[Example,6,,TcpInterfaceOpenServer\SendOnly.cs]-->
        </p>
        <p>
            . 支持异步回调，返回值类型必须为 void，不支持 ref / out 参数，最后一个参数类型必须是委托 <b>Func&lt;AutoCSer.Net.TcpServer.ReturnValue, bool&gt;</b> 或者 <b>Func&lt;AutoCSer.Net.TcpServer.ReturnValue&lt;returnType&gt;, bool&gt;</b>
            <br />服务端必须保证该回调委托被执行，该委托的返回值表示回调数据是否成功添加到发送队列中，失败可能意味着该连接已经关闭；对于客户端而言该返回值没有意义。
            <!--Include:Include\GetCode[Example,7,,TcpInterfaceOpenServer\Asynchronous.cs]-->
            <br />客户端与服务端采用不同的同异步模式需要<b>分别定义接口</b>，并通过配置 <b>CommandIdentityEnmuType</b> 建立映射关系，要求接口名称与枚举<b>名称一一对应</b>，参考内部服务。
        </p>
        <p>
            . 支持异步回调注册，也就是说客户端一个请求，服务器端可以任意多次回调回应，服务端被动推送是典型的应用场景。
            <br />返回值类型必须为 <b>AutoCSer.Net.TcpServer.KeepCallback</b>，对于服务端而言该返回值没有意义。
            <!--Include:Include\GetCode[Example,8,,TcpInterfaceOpenServer\KeepCallback.cs]-->
        </p>
        <p>
            . 支持接口继承与显示接口实现
            <!--Include:Include\GetCode[Example,a,,TcpInterfaceOpenServer\Inherit.cs]-->
        </p>
        <p>
            . 集成支持<a href="/TcpServer/RemoteExpression.html">远程表达式链</a>
            <!--Include:Include\GetCode[Example,e,,TcpInterfaceOpenServer\Expression.cs]-->
        </p>
        <!--Include:Include\SimpleSerialize-->
        <p>
            性能测试项目
            <br /><a href="/Index.html" title="Go to the home page to download">AutoCSer</a>\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpOpenServerPerformance.Emit
            <br /><a href="/Index.html" title="Go to the home page to download">AutoCSer</a>\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpOpenClientPerformance.Emit
            <br /><img src="//__STATICDOMAIN__/TcpServer/InterfaceOpenServer.png?v=2" alt="TCP 接口服务框架 开放服务 吞吐性能测试" />
            <br /><img src="//__STATICDOMAIN__/TcpServer/InterfaceOpenServer.Core.png" alt=".NET Core TCP 接口服务框架 开放服务 吞吐性能测试" />
            <br />从测试结果看来 .NET Core 的吞吐性能有一些提升。
        </p>
    </div>
</body>
</html>